
#include "Common.hpp"

// class CreateNamedPipe
// {
// public:
//     CreateNamedPipe()
//     {
//         int n = mkfifo(g_pathName.c_str(), g_mode);
//         if (n == -1)
//         {
//             std::cerr << "mkfifo fail" << std::endl;
//             return;
//         }
//         std::cerr << "mkfifo success" << std::endl;
//     }

//     ~CreateNamedPipe()
//     {
//         unlink(g_pathName.c_str());
//         std::cout << "管道被销毁" << std::endl;
//     }
// };

// CreateNamedPipe namedpied; // 创建管道

class Server
{
public:
    // 服务端读
    Server()
        : _fd(g_defaultfd){
        // 将创建管道的工作交给Server
        this->CreateNamedPipe();
    }
    void OpenForRead(){
        _fd = openPipe("Server", g_openForRead);
    }
    int ReadPipe(std::string *mess){
        char buffer[g_size];
        int n = ::read(_fd, buffer, sizeof(buffer) - 1);
        if (n > 0)
        {
            buffer[n] = '\0';
            *mess = buffer;
        }
        return n;
    }
    ~Server(){
        closePipe("Server", _fd);
        this->DestroyNamedPipe();
    }
private:
    void CreateNamedPipe(){
        int n = mkfifo(g_pathName.c_str(), g_mode);
        if (n == -1)
        {
            std::cerr << "mkfifo fail" << std::endl;
            return;
        }
        std::cerr << "mkfifo success" << std::endl;
    }
    void DestroyNamedPipe(){
        unlink(g_pathName.c_str());
        std::cout << "管道被销毁" << std::endl;
    }

private:
    int _fd;
};